package com.ffggffgfv.backend.controller;

import com.ffggffgfv.backend.dto.UserLoginDTO;
import com.ffggffgfv.backend.service.UserService;
import com.ffggffgfv.backend.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 认证控制器
 */
@RestController
@RequestMapping("/api/auth")
public class AuthController {

    @Autowired
    private UserService userService;

    /**
     * 用户登录
     *
     * @param userLoginDTO 登录信息
     * @return 登录结果
     */
    @PostMapping("/login")
    public Result login(@RequestBody UserLoginDTO userLoginDTO) {
        // 判断登录类型
        if (userLoginDTO.getLoginType() == null) {
            return Result.validateFailed("登录类型不能为空");
        }

        if (userLoginDTO.getLoginType() == 1) {
            // 用户名/手机号 + 密码登录
            // 修改逻辑：检查用户名和手机号至少有一个不为空
            boolean hasUsername = userLoginDTO.getUsername() != null && !userLoginDTO.getUsername().trim().isEmpty();
            boolean hasPhone = userLoginDTO.getPhone() != null && !userLoginDTO.getPhone().trim().isEmpty();

            if (!hasUsername && !hasPhone) {
                return Result.validateFailed("用户名和手机号不能同时为空");
            }

            if (userLoginDTO.getPassword() == null || userLoginDTO.getPassword().isEmpty()) {
                return Result.validateFailed("密码不能为空");
            }
        } else if (userLoginDTO.getLoginType() == 2) {
            // 手机号 + 验证码登录
            if (userLoginDTO.getPhone() == null || userLoginDTO.getPhone().trim().isEmpty()) {
                return Result.validateFailed("手机号不能为空");
            }
            if (userLoginDTO.getVerifyCode() == null || userLoginDTO.getVerifyCode().trim().isEmpty()) {
                return Result.validateFailed("验证码不能为空");
            }
        } else {
            return Result.validateFailed("不支持的登录类型");
        }

        // 执行登录
        Map<String, Object> loginResult = userService.login(userLoginDTO);

        if (loginResult == null) {
            if (userLoginDTO.getLoginType() == 1) {
                return Result.validateFailed("用户名/手机号或密码错误");
            } else {
                return Result.validateFailed("手机号或验证码错误");
            }
        }

        return Result.success(loginResult, "登录成功");
    }

    /**
     * 获取短信验证码（示例接口，实际项目中应该调用短信服务）
     *
     * @param phone 手机号
     * @return 结果
     */
    @GetMapping("/sms-code")
    public Result getSmsCode(@RequestParam String phone) {
        // 实际项目中应该调用短信服务发送验证码，并将验证码存入缓存
        // 这里简化处理，直接返回固定验证码
        return Result.success("0000", "验证码已发送");
    }
}
